export {}

// 泛型接口

// 对象中有两个方法, 一个是获取id的方法 一个是获取id数组的方法   类型都是一致的

// interface IdFnObj {
//   id(): number
//   ids(): number[]
// }

// 如果id变成了字符串, 上面的接口就不适用了,为了兼容不同的类型,可以采用泛型
// interface IdFnObj1 {
//   id(): string
//   ids(): string[]
// }

interface IdFnObj<T> {
  id(): T
  ids(): T[]
}

let obj: IdFnObj<string> = {
  id() {
    return 'a'
  },
  ids() {
    return ['a', 'b']
  }
}

let obj1: IdFnObj<number> = {
  id() {
    return 1
  },
  ids() {
    return [1,2,3]
  }
}

// ts有很多内置的泛型接口
const arr = [1,2,3,4,5]
// 把鼠标移到原生方法上可以看到内置的泛型接口
arr.push(6)

arr.map((item) => {
  console.log(item)
})